# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'page2.ui'
#
# Created: Wed Sep 23 11:29:24 2009
#      by: PyQt4 UI code generator 4.4.4
#
# WARNING! All changes made in this file will be lost!


from PyQt4 import QtCore, QtGui
from PythonUI.Ui_Page2 import Ui_Page2
import os
import sys
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QWidget
from DAC.BatimentDAC import Batiment

globals()["x"] = 0
globals()["y"] = 0

class Page2(Ui_Page2,QtGui.QDialog):
    """
    Page de gestion du batiment
    """
    def __init__(self,session):
        """
        Fonction d'initialisation
        """
        self.app = QtGui.QApplication(sys.argv)
        QtGui.QDialog.__init__(self)
        self.session=session
        self.list=[]
        self.dicobatiment={}
        #creation du repertoire ~/.GWA(si non existant)
        repertoire_home = os.path.expanduser('~') + "/.GWA/"
        if (not os.path.isdir(repertoire_home)):
            os.mkdir(repertoire_home)
        os.system('touch ~/.GWA/dicobatiment')
        self.filename = ""
        # Suppression de l'interface monitor mon0 si une capture a été faite avant (pose des pb sinon)
        os.system('gksudo airmon-ng stop mon0 >/dev/null')

    def affich(self,param):
        """
        Fonction qui permet d'afficher la page.
        """
        self.parametre=param
        self.setupUi(self)
        self.show()
        sys.exit(self.app.exec_())

    def suivant(self):
        """
        Fonction appelee lors de la validation du  bouton 'OK'
        """
        if (self.lineEdit_nom.displayText() == ''):
            QtGui.QMessageBox.critical(self, "GWA", "Le nom du batiment ne doit pas etre vide !", QtGui.QMessageBox.Ok)
            #On quitte la fonction
            return ''
        if (self.filename == ''):
            QtGui.QMessageBox.critical(self, "GWA", "Pas de plan de batiment !", QtGui.QMessageBox.Ok)
            #On quitte la fonction
            return ''
        if (self.doubleSpinBox_longueur_batiment.value() == 0.0 or self.doubleSpinBox_largueur_batiment.value() == 0.0):
            QtGui.QMessageBox.critical(self, "GWA", "Dimensions incorrectes", QtGui.QMessageBox.Ok)
            #On quitte la fonction
            return ''
        self.dicobatiment["x"]=str(0)
        self.dicobatiment["y"]=str(0)
        self.dicobatiment["z"]=str(0)
        self.dicobatiment["realheight"]=self.doubleSpinBox_longueur_batiment.value()
        self.dicobatiment["realwidth"]=self.doubleSpinBox_largueur_batiment.value()
        self.dicobatiment["nom"]=self.lineEdit_nom.displayText()
        self.dicobatiment["description"]=self.textEdit_description.toPlainText()
        self.dicobatiment["previousheight"] = str(self.objImg.height())
        self.dicobatiment["previouswidth"] = str(self.objImg.width())
        self.dicobatiment["nextheight"] = str(self.objImgModif.height())
        self.dicobatiment["nextwidth"] = str(self.objImgModif.width())
        self.dicobatiment["url_plan"]=self.filename
        index=self.comboBox_plan.currentIndex()
        if(index >= 1):
            batiment=Batiment(self.list[index-1]["ID"])
            batiment.createByDico(self.dicobatiment)
            batiment.updateIntoDb()
        else:   
            batiment=Batiment()
            batiment.createByDico(self.dicobatiment)
            batiment.insertToDb()
        #21/09/2009 - SebC - Modification pour écriture dans le home local de l'utilisateur (creation du rep dans setupui())
        fichier=open(os.path.expanduser('~') + '/.GWA/dicobatiment','a')
        fichier.write('\nnom:'+self.lineEdit_nom.displayText())
        fichier.write('\nx:'+str(globals()["x"]))
        fichier.write('\ny:'+str(globals()["y"]))
        fichier.write('\nrealheight: %f'  % self.doubleSpinBox_longueur_batiment.value())
        fichier.write('\nrealwidth: %f' % self.doubleSpinBox_largueur_batiment.value())
        fichier.write('\nurl_plan:'+self.filename)
        fichier.write('\nid:'+batiment.id["value"])
        fichier.write('\npreviousheight:'+str(self.objImg.height()))
        fichier.write('\npreviouswidth:'+str(self.objImg.width()))
        fichier.write('\nnextheight:'+str(self.objImgModif.height()))
        fichier.write('\nnextwidth:'+str(self.objImgModif.width()))
        fichier.close()
        ### ajouter dans gestion###
        self.close()
        os.system("./Main.py 3")


    def displayPicture(self):
        """
        Mise a jour du label ou sera affiche le plan
        """
        #On vide le label:
        self.label_plan.clear()
        # redimensionnement de l'image
        self.objImgModif = self.objImg.scaled(451,406,Qt.KeepAspectRatio,Qt.FastTransformation)
        # taille de l'image
        a = self.objImgModif.height()
        b = self.objImgModif.width()
        # affichage de l'objet image dans le label
        self.label_plan.clear()
        self.label_plan.setPixmap(QtGui.QPixmap.fromImage(self.objImgModif))


    def parcourir(self):
        """
        Ouverture d'un fichier image qui sera le plan du batiment
        """
        # On récupère le chemin de l'image à récupérer
        self.filename = str(QtGui.QFileDialog.getOpenFileName(self, 'Open file', os.path.expanduser('~'),"Images (*.png *.jpg)"))
 
        # test pour vérifier que le chemin à bien été récupéré    
        b="echo "+self.filename    
        os.system(b)
       
        # Affichage de l'objet image
        self.objImg=QtGui.QImage(self.filename)
        self.displayPicture()

    def displayBatiment(self):
        """
        Remplissage des champs de la fenetre avec les infos de la BDD
        """
        index=self.comboBox_plan.currentIndex()
        if index >= 1:
            self.pushButton_supprimer.setEnabled(True)
            self.lineEdit_nom.setText(self.list[index-1]["nom"])
            self.textEdit_description.setText(self.list[index-1]["description"])
            self.doubleSpinBox_longueur_batiment.setValue(self.list[index-1]["realheight"])
            self.doubleSpinBox_largueur_batiment.setValue(self.list[index-1]["realwidth"])
            self.textEdit_2.setText("x:"+str(self.list[index-1]["x"])+"\ny:"+str(self.list[index-2]["y"])+"\nz:"+str(self.list[index-1]["z"]))
            self.filename= self.list[index-1]["url_plan"]
            # Affichage de l'objet image
            self.objImg=QtGui.QImage(self.filename)
            self.displayPicture()
        #On Clear tous les champs
        else:
            self.pushButton_supprimer.setEnabled(False)
            self.lineEdit_nom.clear()
            self.textEdit_description.clear()
            self.doubleSpinBox_longueur_batiment.setValue(0.0)
            self.doubleSpinBox_largueur_batiment.setValue(0.0)
            self.textEdit_2.clear()
            self.label_plan.clear()

    def supprimer(self):
        """
        Suppression d'un batiment
        """
        index=self.comboBox_plan.currentIndex()
        batiment_to_delete = Batiment(self.list[index-1]['ID'])
        nb_enregistrements=batiment_to_delete.deleteFromDb()
        print nb_enregistrements
        self.maj_comboBox()
        self.comboBox_plan.setCurrentIndex(index-1)

    def confirmation(self):
        """
        Demande de confirmation de la suppression du batiment.
        Fonction appele par le bouton de suppression.
        """
        reply = QtGui.QMessageBox.question(self, 'GWA',"Etes vous sur de vouloir supprimer ce batiment ?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            self.supprimer()
        else:
            pass

    def precedent(self):
        """
        Fonction appele lors de la validation du bouton 'Annuler'
        """
        self.close()
        os.system("./Main.py 1")

    def maj_comboBox(self):
        """
        Mise a jour de la comboBox de selection des batiments.
        """
        self.comboBox_plan.clear()
        self.comboBox_plan.addItem("nouveau batiment")
        batiment=Batiment()
        self.list=batiment.selectBatimentFromDB()
        for bat in self.list:
             self.comboBox_plan.addItem(bat["nom"])

    def setupUi(self, Dialog):
        """
        Definition de l'interface graphique.
        La majorite de cette fonction est decrite dans le fichier genere par pyuic4 dans PythonUI/...
        """
        Ui_Page2.setupUi(self,Dialog)
        self.doubleSpinBox_largueur_batiment.setMaximum(999999.99)
        self.doubleSpinBox_longueur_batiment.setMaximum(999999.99)
        self.comboBox_plan.addItem("nouveau batiment")
        self.pushButton_supprimer.setEnabled(False)
        batiment=Batiment()
        self.list=batiment.selectBatimentFromDB()
        for bat in self.list:
             self.comboBox_plan.addItem(bat["nom"])
        self.connect(self.pushButton_inserplan,QtCore.SIGNAL("clicked()"),self.parcourir)
        self.connect(self.comboBox_plan, QtCore.SIGNAL("currentIndexChanged(int)"), self.displayBatiment)
        self.connect(self.pushButton_supprimer, QtCore.SIGNAL("clicked()"), self.confirmation)  
        self.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), self.suivant)
        self.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), self.precedent)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
